package cn.tannn.surenessdemo.user.service;


import cn.tannn.surenessdemo.controller.dto.AddResourceDTO;
import cn.tannn.surenessdemo.controller.dto.UpdateResourceDTO;
import cn.tannn.surenessdemo.user.entity.AuthResource;
import org.springframework.data.domain.Page;
import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * @author tan
 * @date 2022-07-18 11:18:26
 */
public interface ResourceService {

    /**
     * 添加uri的资源
     * @param authResource resource
     * @return success-true failed-false
     */
    boolean addResource(AddResourceDTO authResource);

    /**
     * 添加uri的资源
     * @param authResource resource
     * @return success-true failed-false
     */
    boolean addResource(List<AuthResource> authResource);

    /**
     * 确定资源是否已经存在
     * @param authResource resource
     * @return existed-true no-false
     */
    boolean isResourceExist(AddResourceDTO authResource);

    /**
     * 更新uri的资源
     * @param authResource resource
     * @return success-true failed-false
     */
    boolean updateResource(UpdateResourceDTO authResource);

    /**
     * 删除uri的资源
     * @param resourceCode resourceCode
     * @return success-true no existed-false
     */
    boolean deleteResource(String resourceCode);

    /**
     * 获取所有uri的资源
     * @return resource list
     */
    Optional<List<AuthResource>> getAllResource();

    /**
     *添加uri的资源分页
     * @param currentPage current page
     * @param pageSize page size
     * @return Page of resource
     */
    Page<AuthResource> getPageResource(Integer currentPage, Integer pageSize);

    /**
     * 加载 需拦截的资源（即拦截资源)
     *resource-path-role eg: /api/v2/host===post===[role2,role3,role4]
     * @return resource-path-role
     */
    Set<String> getAllEnableResourcePath();

    /**
     * 加载 不被拦截的资源（即放行资源)
     *  resource-path-role eg: /api/v2/host===post===[role2,role3,role4]
     * @return resource-path-role
     */
    Set<String> getAllDisableResourcePath();

    /**
     * 拦截资源
     * @param resourceCodes resourceCodes
     */
    void enable(List<String> resourceCodes);

    /**
     * 不拦截资源
     * @param resourceCodes resourceCodes
     */
    void disabled(List<String> resourceCodes);


    /**
     * 拦截所有资源
     */
    void interceptAll();


    /**
     * 为资源设置路由
     * @param routeCode 路由 code
     * @param resourceCodes 资源 Code
     */
    void authorityResourceRoute(String routeCode, String resourceCodes);

    /**
     * 为资源设置路由 - 多个资源一个路由
     * @param routeCode 路由 code
     * @param resourceCodes 资源 Code
     */
    void authorityResourceRoute(String routeCode, List<String> resourceCodes);

    /**
     * 在此资源中取消对该路由的授权
     * @param routeCode 路由 code
     * @param resourceCode 资源 Code
     */
    void deleteAuthorityResourceRoute(String routeCode, String resourceCode);

}
